package top.byfree.jbyan.saber.bean.pojo

import org.ktorm.entity.Entity
import top.byfree.jbyan.saber.bean.vo.MenuVo
import top.byfree.jbyan.saber.bean.vo.RoleVo
import top.byfree.jbyan.saber.bean.vo.RouteMenu
import java.time.LocalDateTime

/**
 * 菜单表
 *
 * @author jbyan
 * @since 20/3/2024
 */
interface Menu : Entity<Menu> {

    companion object : Entity.Factory<Menu>()

    /* 菜单Id */
    var menuId: String

    /* 菜单名称 */
    var menuName: String

    /* 父Id */
    var parentId: String

    /* 权限 */
    var perms: String

    /* 路径 */
    var path: String

    /* 是否外链 */
    var isFrame: Int

    /* 菜单类型 */
    var menuType: String

    /* 按钮类型 */
    var btnType: String

    /* 是否隐藏 */
    var visible: Int

    /* 菜单状态 */
    var status: Int

    /* 图标 */
    var icon: String

    /* 创建时间 */
    var gmtCreate: LocalDateTime

    /* 修改时间 */
    var gmtModify: LocalDateTime

    /* 备注 */
    var remark: String

    /* 排序编号 */
    var orderNum: Int

    /* 创建人 */
    var createBy: String

    /* 修改人 */
    var modifyBy: String

    /* 组件 */
    var component: String

    /* 逻辑删除 */
    var isDelete: Int


    fun toVo() = MenuVo(
        menuId,
        menuName,
        parentId,
        perms,
        path,
        isFrame,
        menuType,
        btnType,
        visible,
        status,
        icon,
        gmtCreate,
        gmtModify,
        remark,
        orderNum,
        createBy,
        modifyBy,
        component,
    )

    fun toRoute() = RouteMenu(
        mutableListOf(),
        menuId,
        menuName,
        parentId,
        perms,
        path,
        isFrame,
        menuType,
        btnType,
        visible,
        status,
        icon,
        gmtCreate,
        gmtModify,
        remark,
        orderNum,
        createBy,
        modifyBy,
        component,
    )

}